package control;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.faces.model.SelectItem;

import model.Aluno;
import model.Curso;
import model.Professor;
import model.Turma;
import model.Turno;
import dao.DAOAluno;
import dao.DAOCurso;
import dao.DAOProfessor;
import dao.DAOTurma;

public class EditaTurmaBean {
	private int numero, capacidade;
	private String turno, professor, curso, aluno;
	private Date dataInicio, dataFim;
	private Turma atual;	
		
	public Turma getAtual() {
		return atual;
	}
	public void setAtual(Turma atual) {
		this.atual = atual;
	}
	public String getAluno() {
		return aluno;
	}
	public void setAluno(String aluno) {
		this.aluno = aluno;
	}
	public int getNumero() {
		return numero;
	}
	public void setNumero(int numero) {
		this.numero = numero;
	}
	public int getCapacidade() {
		return capacidade;
	}
	public void setCapacidade(int capacidade) {
		this.capacidade = capacidade;
	}
	public String getTurno() {
		return turno;
	}
	public void setTurno(String turno) {
		this.turno = turno;
	}
	public Date getDataInicio() {
		return dataInicio;
	}
	public void setDataInicio(Date dataInicio) {
		this.dataInicio = dataInicio;
	}
	public Date getDataFim() {
		return dataFim;
	}
	public void setDataFim(Date dataFim) {
		this.dataFim = dataFim;
	}
	public String getProfessor() {
		return professor;
	}
	public void setProfessor(String professor) {
		this.professor = professor;
	}
	public String getCurso() {
		return curso;
	}
	public void setCurso(String curso) {
		this.curso = curso;
	}
	public List<SelectItem> getProfessores() {
		DAOProfessor daoPro = new DAOProfessor();
		List<Professor> lista = daoPro.findAll();
		List<SelectItem> professores = new ArrayList<SelectItem>();
		for (Professor professor : lista) {
			SelectItem s = new SelectItem(professor.getLogin(),
					professor.getNome());
			professores.add(s);
		}
		return professores;
	}	
	public List<SelectItem> getAlunos() {
		List<SelectItem> alunos = new ArrayList<SelectItem>();
		try{
			List<Aluno> lista = atual.getAlunos();
			for (Aluno a : lista) {
				SelectItem s = new SelectItem(a.getLogin(),a.getNome());
				alunos.add(s);
			}
		}catch(Exception e){
		}		
		return alunos;
	}
	public List<SelectItem> getCursos() {
		DAOCurso daoCu = new DAOCurso();
		List<Curso> lista = daoCu.findAll();
		List<SelectItem> cursos = new ArrayList<SelectItem>();
		for (Curso c : lista) {
			SelectItem s = new SelectItem(c.getNome(), c.getNome());
			cursos.add(s);
		}
		return cursos;
	}
	
	public void carregar(){
		numero = atual.getNumero();
		capacidade = atual.getCapacidade();
		turno = atual.getTurno().toString();
		if (atual.getProfessor() != null)
			professor = atual.getProfessor().getLogin();
		if (atual.getCurso() != null)
			curso = atual.getCurso().getNome();
		dataInicio = atual.getDataInicio().getTime();
		dataFim = atual.getDataFim().getTime();		
	}

	public void atualizar() {
		DAOProfessor daoProf = new DAOProfessor();
		DAOCurso daoCu = new DAOCurso();
		Professor p = (Professor) daoProf.find(professor);
		Curso c = daoCu.find(curso);
		Turma t;
		DAOTurma daoTu = new DAOTurma();

		t = daoTu.find(numero);
		Professor pant = t.getProfessor();
		Curso cant = t.getCurso();
		t.setProfessor(null);
		t.setCurso(null);
		daoProf.merge(pant);
		daoCu.merge(cant);

		t.setCurso(c);
		t.setProfessor(p);
		t.setCapacidade(capacidade);
		t.setTurno(Turno.valueOf(turno));
		Calendar dataI = Calendar.getInstance();
		Calendar dataF = Calendar.getInstance();
		dataI.setTime(dataInicio);
		dataF.setTime(dataFim);
		t.setDataInicio(dataI);
		t.setDataFim(dataF);

		try {
			daoTu.begin();
			daoTu.merge(t);
			daoCu.merge(c);
			daoProf.merge(p);
			daoTu.commit();

		} catch (Exception e) {
			c.removeTurma(t);
			p.removeTurma(t);
			daoTu.rollback();
			e.getMessage();
		}
	}
	public void removeAluno(){
		DAOTurma daotur = new DAOTurma();
		DAOAluno daoalu = new DAOAluno();
		
		Turma t = daotur.find(numero);
		Aluno a = daoalu.find(aluno);
		
		t.removeAluno(a);
		daotur.merge(t);
		daoalu.merge(a);
		daotur.commit();
	}
}